package com.qzh.baseStruct;

import lombok.NonNull;

import java.io.Serializable;

/**
 * 无限制队列
 * @param <E>
 */
public class UnlimitQueue<E> implements Serializable {
    /**
     * 当前大小，初始化为0
     */
    private Long size = 0L;
    /**
     * 首元素
     */
    private node<E> first;
    /**
     * 末元素
     */
    private node<E>last;

    public UnlimitQueue(E e) {
        node<E>root = new node<>();
        root.priv = root;
        root.next = null;
        root.value = e;
        size++;
        first = root;
        last = root;
    }

    /**
     * 返回第一个元素值
     * @return
     */
    public E first(){
        return first.value;
}

    /**
     * 返回最后一个元素值
     * @return
     */
    public E last(){
        return last.value;
}

    /**
     * 取出第一个元素
     * @return
     */
    public E pop(){
        E v = first.value;
        node<E> next = first.next;
        size--;
        first = next;
return v;
    }
    public long size() {
        return size;
    }
public void add(@NonNull E e){
        node<E> node = new node<>();
        node.value = e;
        node.priv = last;
        node.next = null;
        last.next = node;
        size++;
        last = node;
}
    /**
     * 节点
     * @param <E>
     */
    private final class node<E>{
        E value;
        node<E> priv;
        node<E>next;
    }

}
